SQLite のノウハウ – Site

您所在的位置:网站首页 squeezing performance from sqlite SQLite のノウハウ – Site

SQLite のノウハウ – Site

2023-03-17 01:23| 来源: 网络整理| 查看: 265

目次

1 関数2 インデックス3 パフォーマンスチューニング4 journal_mode5 synchronous6 locking_mode7 メモリ使用量8 COUNT のパフォーマンス9 大量の UPDATE / DELETE の使用を避ける10 INSERT11 EXPLAIN QUERY PLAN12 全文検索13 巨大なデータベースを扱う14 比較15 Tips 関数

参考:

SQLite 関数の使い方 | SQLite入門 (www.dbonline.jp)

Core Functions | SQLite Query Language [Official]

インデックス

参考:

SQLite3 のインデックスのベンチマーク | ぺけみさお

パフォーマンスチューニング

参考:

sqlite3 で使える PRAGMA 文 – Qiita

Increasing SQLite Performance | Devart blog

Let’s speed up SQLite | componavt

Pragma statements supported by SQLite | SQLite [Official]

journal_mode DELETE:トランザクション完了時にジャーナルを削除する。(デフォルト) TRUNCATE:トランザクション完了時にジャーナルを削除する代わりにファイルサイズを 0 に切り詰める。 PERSIST:ジャーナルを削除する代わりにゼロ埋めを行う。 MEMORY:ジャーナルをメモリ上に置く。不用意なシステムダウンによりデータベースが破損する可能性がある。 WAL:Write-Ahead Log を使用する。データベースコネクションをクローズしても WAL ジャーナルモードは維持される。WAL モードのデータベースにはバージョン 3.7.0 以降の SQLite でのみアクセスできる。 OFF:ロールバックジャーナルを使用しない。アトミックなコミットやトランザクションの機能は使用できない。

参考:

SQLite のパフォーマンスチューニング、または DBIx::Sunny 0.16 の話 | blog.nomadscafe.jp

SQLite のジャーナルモード | なべ’s blog

PRAGMA journal_mode – Pragma statements supported by SQLite | SQLite [Official]

synchronous OFF:OS にデータを渡した後は同期せずに次の処理を開始する。アプリケーションレベルではデータベースは破損しないが、ディスクに書き込む前に OS クラッシュあるいは電源喪失が起こるとデータベースは破損する。データの安全性は劣るが、同期的に書き込む場合に比べてコミットは何倍も高速に処理される。 NORMAL:古いファイルシステム上でジャーナルとして DELETE モードを使用した場合、ごく稀にデータベースが破損する可能性がある。WAL モードを使用した場合、あるいはモダンなファイルシステムで DELETE モードを使用した場合は、ほぼ安全である。WAL ジャーナルモードと NORMAL 同期モードを使用した場合、OS クラッシュあるいは電源喪失時にトランザクションは場合によってロールバックされる。トランザクションはアプリケーションのクラッシュに対しては常に担保される。WAL モードで動作させる場合、ほとんどのアプリケーションに対して NORMAL 同期モードは適切である。 FULL:VFS の xSync メソッドを使用して、次の処理が開始される前に全てのデータが安全にディスクに書き込まれることを担保する。これによって、OS クラッシュや電源喪失においてデータベースは破損しない。 EXTRA:DELETE モードにおいてトランザクションをコミットする際に、ロールバックジャーナルを削除した後にジャーナルを保持するディレクトリが同期される。FULL モードに加えて、コミット直後に電源喪失があった場合の耐障害性が担保される。

ジャーナルモードを WAL に、同期モードを NORMAL に設定する。

PRAGMA journal_mode = WAL; PRAGMA synchronous = NORMAL;

参考:

SQLite のパフォーマンスチューニング、または DBIx::Sunny 0.16 の話 | blog.nomadscafe.jp

PRAGMA synchronous – Pragma statements supported by SQLite | SQLite [Official]

locking_mode NORMAL:書き込みあるいは読み出しの各トランザクションが完了した時にロックが解除される。(デフォルト) EXCLUSIVE:データベースにコネクションが張られている間、共有ロックが取得されて解放されることはない。最初の書き込み時に共有ロックは取得される。

EXCLUSIVE モードを使用する理由

他のプロセスがデータベースファイルにアクセスしないように排他的に使用する。 ファイル操作を行うシステムコールを減らして、パフォーマンスを少し改善することができる。 WAL モードのデータベースでは、共有メモリを使用することなく EXCLUSIVE モードでアクセスできる。

ロック制御を EXCLUSIVE に設定する。

PRAGMA main.locking_mode = EXCLUSIVE;

データベースを指定しなかった場合、以後に接続されるデータベースも含めて全てのデータベースに適用される。

参考:

PRAGMA locking_mode – Pragma statements supported by SQLite | SQLite [Official]

メモリ使用量

参考:

How to reduce SQLite memory consumption? – Stack Overflow

COUNT のパフォーマンス

参考:

SQLite3 で大量データ+複雑な VIEW を COUNT(*) すると固まる (ほど遅い) | 与太郎プログラマの日記

大量の UPDATE / DELETE の使用を避ける

参考:

1万件を超えるなら UPDATE / DELETE は使っちゃダメ| Script

INSERT

参考:

SQLite のインサートが遅いので速度アップの方法を試してみる | ドラブロ

Squeezing Performance from SQLite: Insertions | Jason Feinstein

EXPLAIN QUERY PLAN

参考:

EXPLAIN QUERY PLAN | SQLite [Official]

全文検索

参考:

SQLite FTS3 and FTS4 Extensions | SQLite [Official]

SQLite FTS5 Extension | SQLite [Official]

巨大なデータベースを扱う

参考:

What are the performance characteristics of sqlite with very large database files? – Stack Overflow

What is a realistic, real-world, maximum size for a SQLite database? – Software Engineering Stack Exchange

比較

参考:

Realm と SQLite のパフォーマンス検証を行った話 – Qiita

パフォーマンス比較 Cassandra、Mongodb、SQLite、H2、MySQL、Postgres | cypher256’s blog

SQLite vs Pandas: Performance Benchmarks | The Data Incubator

SQLite Database Speed Comparison | SQLite [Official]

Tips

参考:

1万件を超えるなら UPDATE / DELETE は使っちゃダメ| Script

Everything You Need TO Know About Optimizing SQLite Is Here. | WhoIsHostingThis.com

SQLite Optimization – Performance FAQ | Codificar

記事をシェアする:


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3